#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import argparse
from pathlib import Path

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'xml2gui'))

from xml2gui.parser import XmlParser
from xml2gui.generator import PythonGenerator
from xml2gui.compiler import Compiler


def main():
    parser = argparse.ArgumentParser(description='Xml2GUI构建工具')
    parser.add_argument('xml_file', nargs='?', help='要构建的XML文件')
    parser.add_argument('-exe', '--compile-exe', action='store_true', 
                       help='编译为可执行文件')
    parser.add_argument('-o', '--output-dir', default='dist', 
                       help='Python代码输出目录 (默认: dist)')
    parser.add_argument('--exe-output-dir', default='output', 
                       help='可执行文件输出目录 (默认: output)')
    parser.add_argument('--icon', help='可执行文件的图标文件')
    parser.add_argument('--company', help='公司名称')
    parser.add_argument('--product', help='产品名称')
    parser.add_argument('--version', help='文件版本')
    
    args = parser.parse_args()
    
    if not args.xml_file:
        xml_files = list(Path('.').glob('*.xml'))
        if not xml_files:
            print("错误: 未找到XML文件")
            return 1
        
        if len(xml_files) > 1:
            print("找到多个XML文件，请指定要构建的文件:")
            for i, xml_file in enumerate(xml_files, 1):
                print(f"{i}. {xml_file}")
            
            try:
                choice = int(input("请输入选项编号: ")) - 1
                if 0 <= choice < len(xml_files):
                    args.xml_file = str(xml_files[choice])
                else:
                    print("无效的选项")
                    return 1
            except ValueError:
                print("无效的输入")
                return 1
        else:
            args.xml_file = str(xml_files[0])
    
    if not os.path.exists(args.xml_file):
        print(f"错误: 文件 {args.xml_file} 不存在")
        return 1
    
    print(f"正在构建 {args.xml_file}...")
    
    generator = PythonGenerator()
    
    python_file = generator.generate(args.xml_file, args.output_dir)
    if not python_file:
        print("生成Python代码失败")
        return 1
    
    print(f"Python代码已生成: {python_file}")
    
    if args.compile_exe:
        print("正在编译为可执行文件...")
        
        compiler = Compiler()
        
        exe_file = compiler.compile_to_exe(
            python_file=python_file,
            output_dir=args.exe_output_dir,
            icon_file=args.icon,
            company_name=args.company,
            product_name=args.product,
            file_version=args.version
        )
        
        if exe_file:
            print(f"可执行文件已生成: {exe_file}")
        else:
            print("编译为可执行文件失败")
            return 1
    
    print("构建完成!")
    return 0


if __name__ == "__main__":
    sys.exit(main())